package org.basis.algorithm.bitoperation;

/**
 * 通过位运算来实现加减乘除
 *
 * @author Mr_wenpan@163.com 2022/01/18 17:27
 */
public class AddMinusMultiDivideByBit {

    public static void main(String[] args) {

    }

    /**
     * 加
     */
    public static int add(int a, int b) {
        int sum = a;
        while (b != 0) {
            // a和b先无进位相加
            sum = a ^ b;
            // 得到a + b的进位信息
            b = (a & b) << 1;
            a = sum;
        }
        return sum;
    }

    /**
     * 得到n的相反数
     */
    public static int negNum(int n) {
        return add(~n, 1);
    }

    /**
     * 减
     */
    public static int minus(int a, int b) {
        return add(a, negNum(b));
    }

    /**
     * 乘
     */
    public static int multi(int a, int b) {
        int res = 0;
        while (b != 0) {
            if ((b & 1) != 0) {
                res = add(res, a);
            }
            a <<= 1;
            b >>>= 1;
        }
        return res;
    }

    /**
     * 是否是负数
     */
    public static boolean isNeg(int n) {
        return n < 0;
    }
}
